"""
主工作流程框架
仅包含文件读写、调用各方法以及可视化操作
OCC相关操作已迁移到occ-tools模块
GMSH相关操作已迁移到gmsh-tools模块
"""

import os
import sys
import json

# 添加当前目录到Python路径，确保能导入工具模块
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, current_dir)

from gmsh_tools.gmsh_operations import (
    main_gmsh_processing_with_feature_matching
)

from gmsh_tools.gmsh_visualization import (
    visualize_gmsh_physical_groups_2d,
)


def main_workflow(iges_file_path, output_dir="output"):
    """
    主工作流程：GMSH处理分网并生成VTK文件（使用faceid-to-features数据进行几何特征匹配）
    """
    
    # 创建输出目录
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    print("=== 开始工作流程 ===")
    print(f"输入文件: {iges_file_path}")
    print(f"输出目录: {output_dir}")
    
    
    # 3. GMSH处理（使用几何特征匹配）
    print("\n=== GMSH处理（使用几何特征匹配） ===")
    
    # 调用改进的GMSH处理函数，传入faceid-to-features文件进行几何特征匹配
    faceid_to_features_file = os.path.join(output_dir, "faceid_to_features.json")
    faceid_to_meshsize_file = os.path.join(output_dir, "faceid_to_meshsize.json")
    gmsh_result = main_gmsh_processing_with_feature_matching(iges_file_path, faceid_to_features_file, faceid_to_meshsize_file, output_dir)
    
    # 检查GMSH生成的文件
    gmsh_vtk_file = os.path.join(output_dir, "gmsh_model_with_face_ids.vtk")
    gmsh_vtu_file = os.path.join(output_dir, "gmsh_model_with_face_ids.vtu")
    gmsh_msh_file = os.path.join(output_dir, "gmsh_meshed_model.msh")  # 原始msh文件
    
    # 4. 可视化
    print("\n=== 4. 可视化 ===")
    
    # 优先使用二维GMSH物理组可视化
    print("\n--- GMSH可视化 ---")
    
    if os.path.exists(gmsh_msh_file):
        print(f"✅ 使用二维GMSH物理组可视化: {gmsh_msh_file}")
        gmsh_fig, gmsh_ax = visualize_gmsh_physical_groups_2d(gmsh_msh_file, "GMSH faceID Mapping")
        if gmsh_fig is not None:
            print("✅ GMSH二维可视化成功")
            import matplotlib.pyplot as plt
            plt.show()
        else:
            print("❌ GMSH二维可视化失败，尝试备用方法")
           
    else:
        print("❌ GMSH msh文件不存在，使用备用方法")

    
    print("\n=== 工作流程完成 ===")
    print(f"GMSH处理结果: {gmsh_result}")
    print(f"faceid到features映射: {faceid_to_features_file}")
    print(f"faceid到meshsize映射: {faceid_to_meshsize_file}")


if __name__ == "__main__":
    # 测试文件路径
    test_iges_file = "rotor_dynamics.iges"
    
    # 检查测试文件是否存在
    if not os.path.exists(test_iges_file):
        print(f"警告: 测试文件 {test_iges_file} 不存在")
        print("请确保在 rotor_test 目录中存在 rotor_dynamics.iges 文件")
    else:
        # 运行工作流程
        main_workflow(test_iges_file)